iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

簡介

之前介紹的應用程式大多屬於 Web Application,使用者透過網路與這些應用程式進行互動。而接下來要介紹的則是命令行應用程式(Command Line Application),使用者將透過終端機直接與應用程式互動。

當今最知名且廣泛使用的 Command Line Application,非 Git 莫屬。Git 提供了多種強大的指令,供開發者進行版本控制操作。例如,開發者可以使用 git commit 來提交變更,並通過附加 -m 選項來撰寫提交訊息(Commit Message)。此外,使用 --help 可以查閱指令的詳細說明。
本次的範例會模擬 git,簡單的實作 git commit -m 'message' 以及 git commit --help

在 Python 套件中,最知名的命令行應用程式實作工具無疑是 Click,因其簡單易用而廣受歡迎。開發者無需過多設定,即可輕鬆建立基本功能。此外,Click 也支援子命令及選項處理等常見的命令行基本功能。接下來,我將透過範例來進一步介紹 Click 的使用方法。

範例

本次範例使用的是 Click 8.1.7 版本

poetry add click==8.1.7

首先,開發者需要建立 git.py,並定義一個群組 (group),該群組可以包含多個子命令。例如,在 Git 中,git 群組內有 git addgit commit 等子命令。這種設計有助於開發者擴充及管理眾多命令。

接著,開發者可以定義一個 commit 子命令,這個命令包含一個選項 -m,讓使用者能夠指定提交訊息。正常來說,當使用 git commit 而未提供 -m 選項來指定提交訊息時,Git 會自動打開一個預設的文字編輯器。為了方便教學範例,這裡將此選項設為必填,透過設定 required=True 來實現,此外,我們也會使用 help='Commit message.' 來說明該選項的作用,這樣使用者在查看幫助訊息時能夠清楚了解該選項的用途。這樣的設計不僅提升了用戶體驗,還能避免因為未提供必要參數而導致的錯誤。

另外值得一提的是註解,良好的註解不僅有助於提升代碼的可讀性,還會自動成為命令的簡介,這使得使用者能夠快速了解各個命令的功能。透過這種方式,使用者可以迅速掌握命令的目的與用途,進而提高整體的使用體驗。

import click

@click.group()
def git():
    """A simple Git simulation using Click."""
    pass

@git.command()
@click.option('-m', '--message', required=True, help='Commit message.')
def commit(message):
    """Record changes to the repository."""
    click.echo(f'[master (root-commit) 1234567] {message}')
    click.echo(' 1 file changed, 1 insertion(+), 0 deletions(-)')

if __name__ == '__main__':
    git()

使用者可以執行 poetry run python git.py 即可看到目前的 git 提供了 commit 指令。
https://ithelp.ithome.com.tw/upload/images/20241001/20168663SIHXBi8J71.png

使用者可以執行 poetry run python git.py commit --help 即可看到 git commit 的詳細使用說明。
https://ithelp.ithome.com.tw/upload/images/20241001/20168663Q22t329lkF.png

使用者可以執行 poetry run python git.py commit -m 'Test' 即可看到 commit 成功的結果。
https://ithelp.ithome.com.tw/upload/images/20241001/20168663xK983mZYD5.png


上一篇
[Day 17] Cryptography
下一篇
[Day 19] Typer
系列文
Python 不止於數據,開發應用程式它也在行!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言